package main

import "fmt"

/**
提供了同步机制，因为每一次发送操作都需要和对应的接收操作保持同步
无缓存channel必须保证发送方和接收方都准备好
否则，就会导致先执行发送操作或接收操作的goroutine处于阻塞等待状态
*/

func Eat(foodName string, c chan bool) {
	c <- true
	fmt.Println("我正在吃" + foodName)
}

func main() {
	fmt.Println("主协程正在运行")
	c := make(chan bool)
	go Eat("生蚝", c)
	fmt.Println("主协程运行结束")
	<-c //这行代码，表示接收方准备好了，如果没有执行这行代码，执行Eat这个协程就会阻塞
}
